From: Alex Williamson Date: Thu, 6 Sep 2007 19:48:43 +0000 (-0600) Subject: [IA64] Foreign p2m: Fix vti domain builder. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14994 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=6a9db78fbf173e7c48c178bbae187d340b7acefa;p=xen.git [IA64] Foreign p2m: Fix vti domain builder. It should set arch_domain::convmem_end. Signed-off-by: Isaku Yamahata --- diff --git a/tools/libxc/ia64/xc_ia64_hvm_build.c b/tools/libxc/ia64/xc_ia64_hvm_build.c index d130454fa4..5147f051e2 100644 --- a/tools/libxc/ia64/xc_ia64_hvm_build.c +++ b/tools/libxc/ia64/xc_ia64_hvm_build.c @@ -1028,7 +1028,9 @@ setup_guest(int xc_handle, uint32_t dom, unsigned long memsize, domctl.u.arch_setup.flags = XEN_DOMAINSETUP_hvm_guest; domctl.u.arch_setup.bp = 0; - domctl.u.arch_setup.maxmem = 0; + domctl.u.arch_setup.maxmem = GFW_START + GFW_SIZE; + if (dom_memsize > MMIO_START) + domctl.u.arch_setup.maxmem = dom_memsize + 1 * MEM_G; domctl.cmd = XEN_DOMCTL_arch_setup; domctl.domain = (domid_t)dom; if (xc_domctl(xc_handle, &domctl)) diff --git a/xen/arch/ia64/xen/dom0_ops.c b/xen/arch/ia64/xen/dom0_ops.c index 3fb71bf2fa..794cbe7d51 100644 --- a/xen/arch/ia64/xen/dom0_ops.c +++ b/xen/arch/ia64/xen/dom0_ops.c @@ -23,6 +23,7 @@ #include #include #include +#include #define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0) @@ -104,6 +105,7 @@ long arch_do_domctl(xen_domctl_t *op, XEN_GUEST_HANDLE(xen_domctl_t) u_domctl) } else { d->arch.is_vti = 1; vmx_setup_platform(d); + xen_ia64_set_convmem_end(d, ds->maxmem); } } else { diff --git a/xen/arch/ia64/xen/dom_fw_utils.c b/xen/arch/ia64/xen/dom_fw_utils.c index 3cf1917913..533ecb3227 100644 --- a/xen/arch/ia64/xen/dom_fw_utils.c +++ b/xen/arch/ia64/xen/dom_fw_utils.c @@ -60,6 +60,11 @@ int xen_ia64_is_dom0(struct domain *d) return d == dom0; } +void xen_ia64_set_convmem_end(struct domain *d, uint64_t convmem_end) +{ + d->arch.convmem_end = convmem_end; +} + static void dom_fw_domain_init(struct domain *d, struct fw_tables *tables) { /* Initialise for EFI_SET_VIRTUAL_ADDRESS_MAP emulation */ @@ -107,7 +112,7 @@ static int dom_fw_set_convmem_end(struct domain *d) memmap_info->efi_memdesc_size, efi_mdt_cmp, NULL); if (d->arch.convmem_end == 0) - d->arch.convmem_end = d->max_pages << PAGE_SHIFT; + xen_ia64_set_convmem_end(d, d->max_pages << PAGE_SHIFT); for (p = memmap_start; p < memmap_end; p += memmap_info->efi_memdesc_size) { @@ -119,7 +124,7 @@ static int dom_fw_set_convmem_end(struct domain *d) if (md->attribute == EFI_MEMORY_WB && md->type == EFI_CONVENTIONAL_MEMORY && md->num_pages > 0 && d->arch.convmem_end < end) - d->arch.convmem_end = end; + xen_ia64_set_convmem_end(d, end); } dom_fw_copy_to(d, gpaddr, memmap_info, size); @@ -141,7 +146,7 @@ static void dom_fw_setup_for_domain_restore(domain_t * d, unsigned long maxmem) { assign_new_domain_page(d, FW_HYPERCALL_BASE_PADDR); dom_fw_domain_init(d, domain_mpa_to_imva(d, FW_TABLES_BASE_PADDR)); - d->arch.convmem_end = maxmem; + xen_ia64_set_convmem_end(d, maxmem); } /* copy memory range to domain pseudo physical address space */ diff --git a/xen/include/asm-ia64/dom_fw_utils.h b/xen/include/asm-ia64/dom_fw_utils.h index 1d71cdbb2a..d54d87479c 100644 --- a/xen/include/asm-ia64/dom_fw_utils.h +++ b/xen/include/asm-ia64/dom_fw_utils.h @@ -26,6 +26,7 @@ int xen_ia64_fpswa_revision(struct domain *d, unsigned int *revision); int xen_ia64_is_vcpu_allocated(struct domain *d, uint32_t vcpu); int xen_ia64_is_running_on_sim(struct domain *unused); int xen_ia64_is_dom0(struct domain *d); +void xen_ia64_set_convmem_end(struct domain *d, uint64_t convmem_end); void dom_fw_copy_to(struct domain *d, unsigned long dest_gpaddr, void *src, size_t size); void dom_fw_copy_from(void* dest, struct domain *d, unsigned long src_gpaddr,